%% 函数说明：多领域交叉结构中的基于位置的交叉法（PBX）
%% 例子：
%   parent1 = [1,2,3,4,5,6,7,8,9],parent2 = [5,4,6,9,2,1,7,8,3]
%   假设非选择元件位置为1，3，4，7，8；即选择的元件parent1_child = [0,2,0,0,5,6,0,0,9]
%   父代2删掉已选择的元件，剩余元件序列parent2_left = [4,1,7,8,3]；
%   依次将剩余元件序列parent2_left放入parent1_child，可得子代1parent1_child = [4,2,1,7,5,6,8,3,9]
function sequen = LSO_MNSC_PBX(parent1,parent2)
    %随机一个数字作为非选择元件位置（不是直接选择元件的序号）
    choose_num = randperm(length(parent1)-1,1);%可选择的范围不能>=父代的长度，否则choose_Intersec=0，会出错
    r = randperm(length(parent1),choose_num);%随机choose_num个非选择元件
%     r = [1,3,4,7,8]; %测试用
    parent1_child = parent1;
    parent1_child(r)= 0;%非选择元件位置清零，剩下的就是选择的元件+补零的非选择元件
    choose_Intersec = parent1;
    choose_Intersec(r) = [];%非选择元件全部删掉，剩下的就只有选中的元件
    %在父代2中删掉选中的元件
    parent2_left = parent2;
    for j = 1:length(choose_Intersec)
        parent2_select_index(j) = find(parent2 == choose_Intersec(j));
    end
    parent2_left(parent2_select_index) = [];%剩下的就只有非选择的元件
    %将父代2剩下的元件依次放入子代parent1_child的补零位置
    insert_index = find(parent1_child == 0);
    parent1_child(insert_index) = parent2_left;
    sequen = parent1_child;
end
    